package com.hrc.springboot.controller;

import com.hrc.springboot.dao.DepartmentDao;
import com.hrc.springboot.dao.EmployeeDao;
import com.hrc.springboot.entities.Department;
import com.hrc.springboot.entities.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;

@Controller
public class EmployeeController {

    @Autowired
    private EmployeeDao employeeDao;

    @Autowired
    private DepartmentDao departmentDao;

    // 查询员工列表放回页面
    @GetMapping("/emps")
    public String list(Model model) {
        Collection<Employee> employees = employeeDao.getAll();
        // 放在请求域中进行共享
        model.addAttribute("employees", employees);
        // 由于SpringBoot整合了Thymeleaf，其中有视图解析器，
        // 会在指定的classpath(当前路径下为templates)下找相对应的数据信息进行视图拼接
        return "emp/list";
    }

    // 员工添加
    @GetMapping("/emp")
    public String toAddPage(Model model) {
        // 跳转到添加页面，在添加之前先查出所有的部门，在页面中以下拉列表的形式显示
        Collection<Department> departments = departmentDao.getDepartments();
        model.addAttribute("departs", departments);
        return "emp/add";
    }

    // 员工添加
    // SpringMVC会自动将对传入的参数和入参对象进行绑定
    // 要求请求参数的名称和JavaBean入参的对象中的属性需要相同
    @PostMapping("/emp")
    public String addEmp(Employee employee) {
        // System.out.println("输入的对象为：" + employee);
        employeeDao.save(employee);
        // 员工添加完成之后，返回员工列表页面(禁止使用请求转发)
        // redirect，请求重定向   / 代表当前项目路径
        // forward，请求转发
        return "redirect:/emps";
    }

    // 修改页面的跳转
    @GetMapping("/emp/{id}")
    public String toEditPage(@PathVariable Integer id, Model model) {
        Employee employee = employeeDao.get(id);
        model.addAttribute("emp", employee);
        // 显示所有的部门名称
        Collection<Department> departments = departmentDao.getDepartments();
        model.addAttribute("departs", departments);
        // 回到修改页面，对添加页面进行再次复用
        return "emp/add";
    }

    // 修改页面
    @PutMapping("/emp")
    public String updateEmp(Employee employee) {
        // System.out.println("修改的员工数据：" + employee);
        employeeDao.save(employee);
        return "redirect:/emps";
    }

    // 员工删除
    @DeleteMapping("/emp/{id}")
    public String delEmp(@PathVariable() Integer id) {
        employeeDao.delete(id);
        return "redirect:/emps";
    }

}
